#include<iostream>
#include<cstring>
using namespace std;
class carray{
	int size;
	int*ptr;
	public:
		carray(int s=0);
		carray(const carray&a);
		~carray();
		void push_back(int v);
		carray&operator=(const carray&a);
		int length(){
			return size;
		}
int&operator[](int i)
		{
		return ptr[i];
		}
};
carray::carray(int s):size(s)
{
	if(s==0)
	ptr=NULL;
	else
	ptr=new int[s];
}
carray::carray(const carray&a)
{
	if(!a.ptr){
		ptr=NULL;
		size=0;
		return;
	}
	ptr=new int[a.size];
	memcpy(ptr,a.ptr,sizeof(int)*a.size);
	size=a.size;
}
carray::~carray()
{
	if(ptr)delete[]ptr;
}
carray&carray::operator=(const carray&a)
{
	if(ptr==a.ptr)
	return*this;
	if(a.ptr==NULL)
	{
		if(ptr)
		delete[]ptr;
		ptr=NULL;
		size=0;
		return*this;
	}
	if(size<a.size){
		if(ptr)
		delete[]ptr;
		ptr=new int[a.size];
	}
	memcpy(ptr,a.ptr,sizeof(int)*a.size);
	size=a.size;
	return*this;
}
void carray::push_back(int v)
{
	if(ptr){
		int*tmpptr=new int[size+1];
		memcpy(tmpptr,ptr,sizeof(int)*size);
		delete[]ptr;
		ptr=tmpptr;
	}
	else
	ptr=new int[1];
	ptr[size++]=v;
}
int main()
{
	carray a;
	for(int i=0;i<5;i++)
	a.push_back(i);
	carray a2,a3;
	a2=a;
	for(int i=0;i<a.length();++i)
	cout<<a2[i]<<"";
	a2=a3;
	for(int i=0;i<a2.length();++i)
	cout<<a2[i]<<"";
	cout<<endl;
	a[3]=100;
	carray a4(a);
	for(int i=0;i<a4.length();++i)
	cout<<a4[i]<<"";
	return 0;
}